<!doctype html>
<html lang="zh-cn">
  <head>
    <title>Redis(2) // JW Blog</title>
    <meta charset="utf-8" />
    <meta name="generator" content="Hugo 0.60.1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="John Doe" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="https://duyi111.gitee.io/css/main.min.f90f5edd436ec7b74ad05479a05705770306911f721193e7845948fb07fe1335.css" />

    
    <meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Redis(2)"/>
<meta name="twitter:description" content="1.与python交互 1.1 调用模块  引入模块 from redis import StrictRedis  这个模块中提供了StrictRedis对象，对于连接Redis服务器并按照不同类型提供了不同方法，进行交互操作  1.2 StrictRedis对象方法  通过init创建对象，指定参数host、post与指定的服务器和端口连接，host默认为localhost，post默认为6379，db默认为0 sr = StrictRedis(host=&#39;localhost&#39;, port=6379,db=0) # 简写 sr = StrictRedis()  根据不同的类型，拥有不同的实例方法可以调用，与之前的Redis命令对应，方法需要的参数与命令的参数一致  1.2.1 string  set setex mset append get mget key  1.2.2 keys  exists type delete expire getrange ttl  1.2.3 hash  hset hmset hkeys hget hmget hvals hdel  1.2.4 list  lpush rpush linsert lrange lset lrem  1."/>

    <meta property="og:title" content="Redis(2)" />
<meta property="og:description" content="1.与python交互 1.1 调用模块  引入模块 from redis import StrictRedis  这个模块中提供了StrictRedis对象，对于连接Redis服务器并按照不同类型提供了不同方法，进行交互操作  1.2 StrictRedis对象方法  通过init创建对象，指定参数host、post与指定的服务器和端口连接，host默认为localhost，post默认为6379，db默认为0 sr = StrictRedis(host=&#39;localhost&#39;, port=6379,db=0) # 简写 sr = StrictRedis()  根据不同的类型，拥有不同的实例方法可以调用，与之前的Redis命令对应，方法需要的参数与命令的参数一致  1.2.1 string  set setex mset append get mget key  1.2.2 keys  exists type delete expire getrange ttl  1.2.3 hash  hset hmset hkeys hget hmget hvals hdel  1.2.4 list  lpush rpush linsert lrange lset lrem  1." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://duyi111.gitee.io/post/redis2/" />
<meta property="article:published_time" content="2020-02-13T17:03:58+08:00" />
<meta property="article:modified_time" content="2020-02-13T17:03:58+08:00" />


  </head>
  <body>
    <header class="app-header">
      <a href="https://duyi111.gitee.io/"><img class="app-header-avatar" src="/avatar.jpg" alt="John Doe" /></a>
      <h1>JW Blog</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vehicula turpis sit amet elit pretium.</p>
      <div class="app-header-social">
        
      </div>
    </header>
    <main class="app-container">
      
  <article class="post">
    <header class="post-header">
      <h1 class ="post-title">Redis(2)</h1>
      <div class="post-meta">
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-calendar">
  <title>calendar</title>
  <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
          Feb 13, 2020
        </div>
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
  <title>clock</title>
  <circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
          2 min read
        </div></div>
    </header>
    <div class="post-content">
      <h2 id="1python">1.与python交互</h2>
<h4 id="11-">1.1 调用模块</h4>
<ul>
<li>引入模块
<pre><code>from redis import StrictRedis
</code></pre></li>
<li>这个模块中提供了StrictRedis对象，对于连接Redis服务器并按照不同类型提供了不同方法，进行交互操作</li>
</ul>
<h4 id="12-strictredis">1.2 StrictRedis对象方法</h4>
<ul>
<li>通过init创建对象，指定参数host、post与指定的服务器和端口连接，host默认为localhost，post默认为6379，db默认为0
<pre><code>sr = StrictRedis(host='localhost', port=6379,db=0)
# 简写
sr = StrictRedis()
</code></pre></li>
<li>根据不同的类型，拥有不同的实例方法可以调用，与之前的Redis命令对应，方法需要的参数与命令的参数一致</li>
</ul>
<h6 id="121-string">1.2.1 string</h6>
<ul>
<li>set</li>
<li>setex</li>
<li>mset</li>
<li>append</li>
<li>get</li>
<li>mget</li>
<li>key</li>
</ul>
<h6 id="122-keys">1.2.2 keys</h6>
<ul>
<li>exists</li>
<li>type</li>
<li>delete</li>
<li>expire</li>
<li>getrange</li>
<li>ttl</li>
</ul>
<h6 id="123-hash">1.2.3 hash</h6>
<ul>
<li>hset</li>
<li>hmset</li>
<li>hkeys</li>
<li>hget</li>
<li>hmget</li>
<li>hvals</li>
<li>hdel</li>
</ul>
<h6 id="124-list">1.2.4 list</h6>
<ul>
<li>lpush</li>
<li>rpush</li>
<li>linsert</li>
<li>lrange</li>
<li>lset</li>
<li>lrem</li>
</ul>
<h6 id="125-set">1.2.5 set</h6>
<ul>
<li>sadd</li>
<li>smembers</li>
<li>srem</li>
</ul>
<h6 id="126-zset">1.2.6 zset</h6>
<ul>
<li>zadd</li>
<li>zrange</li>
<li>zrangebyscore</li>
<li>zscore</li>
<li>zrem</li>
<li>zremrangebyscore</li>
</ul>
<h4 id="13-string">1.3 string类型增删改查示例</h4>
<h6 id="131-string">1.3.1 string-增加</h6>
<ul>
<li>方法set，添加键、值，如果添加成功则返回True，如果添加失败则返回False
<pre><code>from redis import *
if __name__ == '__main__':
    try:
        # 创建StrictRedis对象，与Redis服务器建立连接sr = StrictRedis()
        # 添加键name，值为python
        result = sr.set('name', 'python')
        # 输出响应结果，如果添加成功则返回True，否则返回False
        print(result)
    except Exception as e:
        print(e)
</code></pre></li>
</ul>
<h6 id="132-string">1.3.2 string-获取</h6>
<ul>
<li>方法get，添加键对应的值，如果键存在则返回对应的值，如果键不存在则返回None
<pre><code>from redis import *
if __name__ == '__main__':
    try:
        # 创建StrictRedis对象，与Redis服务器建立连接诶
        sr = StrictRedis()
        # 获取键name的值
        result = sr.get('name')
        # 输出键的值，如果键不存在则返回None
        print(result)
    except Exception as e:
        print(e)
</code></pre></li>
</ul>
<h6 id="133-string">1.3.3 string-修改</h6>
<ul>
<li>方法set，如果键已经存在则进行修改，如果键不存在则进行添加
<pre><code>from redis import *
if __name__==&quot;__main__&quot;:
    try:
        #创建StrictRedis对象，与redis服务器建⽴连接
        sr=StrictRedis()
        #设置键name的值，如果键已经存在则进⾏修改，如果键不存在则进⾏添加
        result = sr.set('name','python11')
        #输出响应结果，如果操作成功则返回True，否则返回False
        print(result)
    except Exception as e:
        print(e)
</code></pre></li>
</ul>
<h6 id="134-string">1.3.4 string-删除</h6>
<ul>
<li>方法delete，删除键及其对应的值，如果删除成功则返回受影响的键数，否则返回0
<pre><code>from redis import *
if __name__==&quot;__main__&quot;:
    try:
        #创建StrictRedis对象，与redis服务器建⽴连接
        sr=StrictRedis()
        # 删除键
        result = sr.delete('name')
        #输出响应结果，如果删除成功则返回受影响的键数，否则则返回0
        print(result)
    except Exception as e:
        print(e)
</code></pre></li>
</ul>
<h6 id="135-">1.3.5 获取键</h6>
<ul>
<li>方法keys，根据正则表达式获取键
<pre><code>from redis import *
if __name__==&quot;__main__&quot;:
    try:
        #创建StrictRedis对象，与redis服务器建⽴连接
        sr=StrictRedis()
        #获取所有的键
        result=sr.keys()
        #输出响应结果，所有的键构成⼀个列表，如果没有键则返回空列表
        print(result)
    except Exception as e:
        print(e)
</code></pre></li>
</ul>
<h2 id="2">2.搭建主从</h2>
<h4 id="21-">2.1 主从概念</h4>
<ul>
<li>一个master可以拥有多个salve，一个slave又可以拥有多个slave，如此下去，形成了强大的多级服务器集群架构</li>
<li>master用来写数据，slave用来读数据，经统计：网站的读写比率是10:1</li>
<li>通过主从配置可以实现读写分离</li>
<li>master和slave都是一个redis实例（redis服务）</li>
</ul>
<h4 id="22-">2.2 主从配置</h4>
<h6 id="221-">2.2.1 配置主</h6>
<ul>
<li>查看当前主机的ip地址
<pre><code>ifconfig
</code></pre></li>
<li>修改<code>/etc/redis/redis.conf</code>文件
<pre><code>sudo vi redis.conf
bind 192.168.26.128(当前主机的ip地址)
</code></pre></li>
<li>重启Redis服务
<pre><code>sudo service redis stop
sudo redis-server redis.conf
</code></pre></li>
</ul>
<h6 id="222-">2.2.2 配置从</h6>
<ul>
<li>复制/etc/redis/redis.conf文件
<pre><code>sudo cp redis.conf ./slave.conf
</code></pre></li>
<li>修改redis/slave.conf文件
<pre><code>sudo vi slave.conf
</code></pre></li>
<li>编辑内容
<pre><code>bind 192.168.26.128(本机ip)
slaveof 192.168.26.128 6379
port 6378
</code></pre></li>
<li>redis服务
<pre><code>sudo redis-server slave.conf
</code></pre></li>
<li>查看主从关系
<pre><code>redis-cli-h 192.168.26.128 info Replication
</code></pre></li>
</ul>
<h4 id="23-">2.3 数据操作</h4>
<ul>
<li>在master和slave分别执行info命令，查看输出信息 进入主客户端
<pre><code>redis-cli-h 192.168.26.128 -p 6379
</code></pre></li>
<li>进入从客户端
<pre><code>redis-cli-h 192.168.26.128 -p 6378
</code></pre></li>
<li>在master上写数据
<pre><code>set aa bb
</code></pre></li>
<li>在slave上读数据
<pre><code>get aa
</code></pre></li>
</ul>

    </div>
    <div class="post-footer">
      
    </div>
  </article>

    </main>
  </body>
</html>
